package ar.edu.utn.frsf.tpae.a2012.g05.dao.impl;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import ar.edu.utn.frsf.tpae.a2012.g05.dao.MovimientoDao;
import ar.edu.utn.frsf.tpae.a2012.g05.entity.Movimiento;
import ar.edu.utn.frsf.tpae.a2012.g05.exception.PersistenciaException;

@Repository
public class MovimientoDaoImpl implements MovimientoDao{

	@Autowired
	private SessionFactory sessionFactory;
	
	private Session getCurrentSession() {
		return sessionFactory.getCurrentSession();
	}
		
	public void saveOrUpdate(Movimiento movimiento) {
		getCurrentSession().saveOrUpdate(movimiento);
	}

	public void delete(Movimiento movimiento) throws PersistenciaException{
		try {
			getCurrentSession().delete(movimiento);
		}
		catch (Exception e) {
			throw new PersistenciaException(e);
		}
	}

	public Movimiento findById(Integer idMovimiento) {
		Movimiento movimiento;
	    movimiento = (Movimiento) getCurrentSession().get(Movimiento.class, idMovimiento);
	    return movimiento;
	}
	
	@SuppressWarnings("unchecked")
	public List<Movimiento> findByIdCuenta(Integer idCuenta) {
	    Query query = getCurrentSession().createQuery("from Movimiento"
	            + " where mov_cta_id = :idCuenta order by mov_fech");
	    query.setInteger("idCuenta", idCuenta);
	    List<Movimiento> movimientos =  (List<Movimiento>) query.list();
	    return movimientos;
	}

	@SuppressWarnings("unchecked")
	public List<Movimiento> findAll() {
		List<Movimiento> movimientos = null;
        Query query = getCurrentSession().createQuery("from Movimiento");
        movimientos = query.list();
		return movimientos;
	}

	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}


}
